﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using GDFlacTool.Common;

namespace GDFlacTool
{
    class DoWorkEventArgsEx : DoWorkEventArgs
    {
        public DoWorkEventArgsEx(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
    }

    public class DoWorkFillTrackListEventArgs : DoWorkEventArgs
    {
        public DoWorkFillTrackListEventArgs(object argument) : base(argument)
        {
        }

        public List<string> Paths { get; set; }
    }

    public class DoWorkGetTagInformationEventArgs : DoWorkEventArgs
    {
        public DoWorkGetTagInformationEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        public string Mask { get; set; }
    }

    public class DoWorkRenameFilesEventArgs : DoWorkEventArgs
    {
        public DoWorkRenameFilesEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        
    }

    public class DoWorkUndoRenameFileEventArgs : DoWorkEventArgs
    {
        public DoWorkUndoRenameFileEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
    }

    public class DoWorkPasteTagEventArgs : DoWorkEventArgs
    {
        public DoWorkPasteTagEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        public bool DontPasteTitleField { get; set; }
        public bool DontPasteTrackField { get; set; }
        public bool DontPasteDiscField { get; set; }
        public bool DontPasteBpmField { get; set; }
        public bool DontPasteLyricsField { get; set; }
        public bool DontPasteArtistField { get; set; }
    }

    public class DoWorkAddFolderPictureToTagEventArgs : DoWorkEventArgs
    {
        public DoWorkAddFolderPictureToTagEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        public int Counter { get; set; }
        public byte[] Bytes { get; set; }
    }

    public class DoWorkAddCoverArtEventArgs : DoWorkEventArgs
    {
        public DoWorkAddCoverArtEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        public byte[] Bytes { get; set; }
    }

    public class DoWorkRemoveCoverArtEventArgs : DoWorkEventArgs
    {
        public DoWorkRemoveCoverArtEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
    }

    public class DoWorkWriteTagsEventArgs : DoWorkEventArgs
    {
        public DoWorkWriteTagsEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        public string Artist { get; set; }
        public string ReleaseType { get; set; }
        public string Album { get; set; }
        public string Year { get; set; }
        public string Genre { get; set; }
        public string Catalog { get; set; }
        public string Comment { get; set; }
        public string AlbumArtist { get; set; }
        public CaseType CaseType { get; set; }
    }

    public class DoWorkRemoveTagsEventArgs : DoWorkEventArgs
    {
        public DoWorkRemoveTagsEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
    }

    public class DoWorkSaveAllChangesEventArgs : DoWorkEventArgs
    {
        public DoWorkSaveAllChangesEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        public byte[] ImageData { get; set; }
    }

    public class DoWorkAutoNumberTrackEventArgs : DoWorkEventArgs
    {
        public DoWorkAutoNumberTrackEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
    }

    public class DoWorkAutoNumberDiscEventArgs : DoWorkEventArgs
    {
        public DoWorkAutoNumberDiscEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
    }

    public class DoWorkGetTitleFromFileEventArgs : DoWorkEventArgs
    {
        public DoWorkGetTitleFromFileEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        public TrackTitleCollection TrackTitles { get; set; }
    }

    public class DoWorkFormatTrackToXEventArgs : DoWorkEventArgs
    {
        public DoWorkFormatTrackToXEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
    }

    public class DoWorkFormatTrackTo0XEventArgs : DoWorkEventArgs
    {
        public DoWorkFormatTrackTo0XEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
    }

    public class DoWorkFormatTrackTo00XEventArgs : DoWorkEventArgs
    {
        public DoWorkFormatTrackTo00XEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
    }

    public class DoWorkFormatTrackToXXXXEventArgs : DoWorkEventArgs
    {
        public DoWorkFormatTrackToXXXXEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
    }

    public class DoWorkFormatTrackToXXEventArgs : DoWorkEventArgs
    {
        public DoWorkFormatTrackToXXEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
    }

    public class DoWorkDeleteTrackNumberEventArgs : DoWorkEventArgs
    {
        public DoWorkDeleteTrackNumberEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
    }

    public class DoWorkWritingTagsFromFileNameEventArgs : DoWorkEventArgs
    {
        public DoWorkWritingTagsFromFileNameEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        public IList<TagFileObject> TagFileObjects { get; set; }
    }

    public class DoWorkCopyTagFieldEventArgs : DoWorkEventArgs
    {
        public DoWorkCopyTagFieldEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        public string FromTag { get; set; }
        public string ToTag { get; set; }
        public string ToProperty { get; set; }
    }

    public class DoWorkSwapTagFieldEventArgs : DoWorkEventArgs
    {
        public DoWorkSwapTagFieldEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        public string FromTag { get; set; }
        public string FromProperty { get; set; }
        public string ToTag { get; set; }
        public string ToProperty { get; set; }
    }

    public class DoWorkTrimTrailingTagFieldsEventArgs : DoWorkEventArgs
    {
        public DoWorkTrimTrailingTagFieldsEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        public int Counter { get; set; }
    }

    public class DoWorkTrimLeadingTagFieldsEventArgs : DoWorkEventArgs
    {
        public DoWorkTrimLeadingTagFieldsEventArgs(object argument)
            : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        public int Counter { get; set; }
    }

    public class DoWorkSwapArtistAlbumEventArgs : DoWorkEventArgs
    {
        public DoWorkSwapArtistAlbumEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        public string FromTag { get; set; }
        public string FromProperty { get; set; }
        public string ToTag { get; set; }
        public string ToProperty { get; set; }
    }

    public class DoWorkSwapArtistTitleEventArgs : DoWorkEventArgs
    {
        public DoWorkSwapArtistTitleEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        public string FromTag { get; set; }
        public string FromProperty { get; set; }
        public string ToTag { get; set; }
        public string ToProperty { get; set; }
    }

    public class DoWorkSwapAlbumTitleEventArgs : DoWorkEventArgs
    {
        public DoWorkSwapAlbumTitleEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        public string FromTag { get; set; }
        public string FromProperty { get; set; }
        public string ToTag { get; set; }
        public string ToProperty { get; set; }
    }

    public class DoWorkRemoveLeadingTheEventArgs : DoWorkEventArgs
    {
        public DoWorkRemoveLeadingTheEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
    }

    public class DoWorkRemoveTrailingTheEventArgs : DoWorkEventArgs
    {
        public DoWorkRemoveTrailingTheEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
    }

    public class DoWorkFormatArtistSurnameNameEventArgs : DoWorkEventArgs
    {
        public DoWorkFormatArtistSurnameNameEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
    }

    public class DoWorkFormatArtistNameSurnameEventArgs : DoWorkEventArgs
    {
        public DoWorkFormatArtistNameSurnameEventArgs(object argument) : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
    }

    public class DoWorkFindAndReplaceInTagsEventArgs : DoWorkEventArgs
    {
        public DoWorkFindAndReplaceInTagsEventArgs(object argument)
            : base(argument)
        {
        }

        public IList<Track> Tracks { get; set; }
        public List<string> Tags { get; set; }
        public string FindInTags { get; set; }
        public string ReplaceInTags { get; set; }
        public bool IgnoreCase { get; set; }
        public string Message { get; set; }
    }

    public class DoWorkConvertAudioEventArgs : DoWorkEventArgs
    {
        public DoWorkConvertAudioEventArgs(object argument)
            : base(argument)
        {
        }

        public List<string> Files { get; set; }
        public string Setting { get; set; }
        public string Extension { get; set; }
        public string Codec { get; set; }
        public string ToPath { get; set; }
    }
}
